package my;

import my.tree.AVLTree;
import my.tree.BST;
import my.printer.BinaryTrees;
import utils.Tools;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *
 * </p>
 *
 * @author AJun
 * @since 2020/8/13
 */
public class Main08 {

    public static void main(String[] args) {
        // test1();
        test2();
    }

    static void test1() {
        Integer[] data = {
                67, 52, 92, 96, 53, 95, 13, 63, 34, 82, 76, 54, 9, 68, 39
        };

        AVLTree<Integer> avlTree = new AVLTree<>();
        for (Integer n : data) avlTree.add(n);

        for (Integer datum : data) {
            avlTree.remove(datum);
            System.out.println("【" + datum + "】");
            BinaryTrees.println(avlTree);
            System.out.println("---------------------------------------");
        }
        BinaryTrees.println(avlTree);
    }

    static void test2() {
        List<Integer> data = new ArrayList<>();
        for (int i = 0; i < 100_0000; i++) {
            data.add((int) (Math.random() * 100_0000));
        }

        Tools.calcTime("BST", () -> {
            BST<Integer> bst = new BST<>();
            for (Integer datum : data) {
                bst.add(datum);
            }
            for (Integer datum : data) {
                bst.contains(datum);
            }
            for (Integer datum : data) {
                bst.remove(datum);
            }
        });

        Tools.calcTime("AVL", () -> {
            AVLTree<Integer> avl = new AVLTree<>();
            for (Integer datum : data) {
                avl.add(datum);
            }
            for (Integer datum : data) {
                avl.contains(datum);
            }
            for (Integer datum : data) {
                avl.remove(datum);
            }
        });
    }

}
